#ifndef __ETH_TX_REGS_H__
#define __ETH_TX_REGS_H__

#include <io.h>

/// \defgroup ETH_TX_REGS Регистры управления и статуса
/// \brief Адресное пространство модуля
/// @{
    /// \name Control and status registers (CSR)
    /// @{
#define ETH_TX_STATUS_REG           0       ///< \sa \ref ETH_TX_STATUS_REG
#define ETH_TX_CTRL_REG             1       ///< \sa \ref ETH_TX_CTRL_REG
#define ETH_TX_DATASZ_REG           2       ///< \sa \ref ETH_TX_DATASZ_REG
#define ETH_TX_DATADDR_REG          3       ///< \sa \ref ETH_TX_DATADDR_REG
#define ETH_TX_DMACL_REG            4       ///< \sa \ref ETH_TX_DMACL_REG
#define ETH_TX_DMACH_REG            5       ///< \sa \ref ETH_TX_DMACH_REG
#define ETH_TX_SMACL_REG            6       ///< \sa \ref ETH_TX_SMACL_REG
#define ETH_TX_SMACH_REG            7       ///< \sa \ref ETH_TX_SMACH_REG
#define ETH_TX_ETYPE_REG            8       ///< \sa \ref ETH_TX_ETYPE_REG
    /// @}

    /// \defgroup ETH_TX_STATUS_REG Регистр статуса 
    /// \brief Содержит флаги состояния модуля
    /// @{
        /// \name Функции доступа к регистру статуса
        /// @{
        #define IOADDR_ETH_TX_STATUS(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_STATUS_REG)
        #define IORD_ETH_TX_STATUS(base) \
            IORD(base, ETH_TX_STATUS_REG) 
        /// @}

        /// \name Битовые обращения к регистру статуса
        /// @{
        #define ETH_TX_STATUS_BUSY_MSK                  0x00000001
        #define ETH_TX_STATUS_BUSY_OFST                 0

        /// @}
    /// @}

    /// \defgroup ETH_TX_CTRL_REG Регистр управления
    /// \brief Предназначен для управления модулем
    /// @{
        /// \name Функции доступа к регистру управления
        /// @{
        #define IOADDR_ETH_TX_CTRL(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_CTRL_REG)
        #define IORD_ETH_TX_CTRL(base) \
            IORD(base, ETH_TX_CTRL_REG) 
        #define IOWR_ETH_TX_CTRL(base, data) \
            IOWR(base, ETH_TX_CTRL_REG, data)
        /// @}

        /// \name Битовые обращения к регистру управления
        /// @{
        #define ETH_TX_CTRL_CMD_MSK                     0x0000000F
        #define ETH_TX_CTRL_CMD_OFST                    0
        /// @}        
    /// @}

    /// \defgroup ETH_TX_DATASZ_REG Регистр размера данных пакета
    /// \brief Устанавливает размер поля данных пакета
    /// @{
        /// \name Функции доступа к регистру размера данных пакета
        /// @{
        #define IOADDR_ETH_TX_DATASZ(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_DATASZ_REG)
        #define IORD_ETH_TX_DATASZ(base) \
            IORD(base, ETH_TX_DATASZ_REG) 
        #define IOWR_ETH_TX_DATASZ(base, data) \
            IOWR(base, ETH_TX_DATASZ_REG, data)
        /// @}

        /// \name Битовые обращения к регистру размера данных пакета
        /// @{
        #define ETH_TX_DATASZ_MSK                  0x000007FF
        #define ETH_TX_DATASZ_OFST                 0
        /// @}        
    /// @}
    
    /// \defgroup ETH_TX_DATADDR_REG Регистр адреса данных
    /// \brief Указывает адрес, с которого будут считаны данные
    /// @{
        /// \name Функции доступа к регистру адреса данных
        /// @{
        #define IOADDR_ETH_TX_DATADDR(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_DATADDR_REG)
        #define IORD_ETH_TX_DATADDR(base) \
            IORD(base, ETH_TX_DATADDR_REG) 
        #define IOWR_ETH_TX_DATADDR(base, data) \
            IOWR(base, ETH_TX_DATADDR_REG, data)
        /// @}

        /// \name Битовые обращения к регистру адреса данных
        /// @{
        #define ETH_TX_DATADDR_MSK                  0xFFFFFFFF
        #define ETH_TX_DATADDR_OFST                 0
        /// @}        
    /// @}
    
    /// \defgroup ETH_TX_DMACL_REG Регистр MAC приемника, младшая часть
    /// \brief Задает MAC приемника, младшая часть
    /// @{
        /// \name Функции доступа к регистру MAC приемника, младшая часть
        /// @{
        #define IOADDR_ETH_TX_DMACL(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_DMACL_REG)
        #define IORD_ETH_TX_DMACL(base) \
            IORD(base, ETH_TX_DMACL_REG) 
        #define IOWR_ETH_TX_DMACL(base, data) \
            IOWR(base, ETH_TX_DMACL_REG, data)
        /// @}

        /// \name Битовые обращения к регистру MAC приемника, младшая часть
        /// @{
        #define ETH_TX_DMACL_MSK                  0xFFFFFFFF
        #define ETH_TX_DMACL_OFST                 0
        /// @}        
    /// @}
    
    /// \defgroup ETH_TX_DMACH_REG Регистр MAC приемника, старшая часть
    /// \brief Задает MAC приемника, старшая часть
    /// @{
        /// \name Функции доступа к регистру MAC приемника, старшая часть
        /// @{
        #define IOADDR_ETH_TX_DMACH(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_DMACH_REG)
        #define IORD_ETH_TX_DMACH(base) \
            IORD(base, ETH_TX_DMACH_REG) 
        #define IOWR_ETH_TX_DMACH(base, data) \
            IOWR(base, ETH_TX_DMACH_REG, data)
        /// @}

        /// \name Битовые обращения к регистру MAC приемника, старшая часть
        /// @{
        #define ETH_TX_DMACH_MSK                  0x0000FFFF
        #define ETH_TX_DMACH_OFST                 0
        /// @}        
    /// @}
    
    /// \defgroup ETH_TX_SMACL_REG Регистр MAC передатчика, младшая часть
    /// \brief Задает MAC передатчика, младшая часть
    /// @{
        /// \name Функции доступа к регистру MAC передатчика, младшая часть
        /// @{
        #define IOADDRL_ETH_TX_SMACL(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_SMACL_REG)
        #define IORD_ETH_TX_SMACL(base) \
            IORD(base, ETH_TX_SMACL_REG) 
        #define IOWR_ETH_TX_SMACL(base, data) \
            IOWR(base, ETH_TX_SMACL_REG, data)
        /// @}

        /// \name Битовые обращения к регистру MAC передатчика, младшая часть
        /// @{
        #define ETH_TX_SMACL_MSK                  0xFFFFFFFF
        #define ETH_TX_SMACL_OFST                 0
        /// @}        
    /// @}
    
    /// \defgroup ETH_TX_SMACH_REG Регистр MAC передатчика, старшая часть
    /// \brief Задает MAC передатчика, старшая часть
    /// @{
        /// \name Функции доступа к регистру MAC передатчика, старшая часть
        /// @{
        #define IOADDRH_ETH_TX_SMACH(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_SMACH_REG)
        #define IORD_ETH_TX_SMACH(base) \
            IORD(base, ETH_TX_SMACH_REG) 
        #define IOWR_ETH_TX_SMACH(base, data) \
            IOWR(base, ETH_TX_SMACH_REG, data)
        /// @}

        /// \name Битовые обращения к регистру MAC передатчика, старшая часть
        /// @{
        #define ETH_TX_SMACH_MSK                  0x0000FFFF
        #define ETH_TX_SMACH_OFST                 0
        /// @}        
    /// @}
    
    /// \defgroup ETH_TX_ETYPE_REG Регистр типа протокола
    /// \brief Задает тип протокола
    /// @{
        /// \name Функции доступа к регистру типа протокола
        /// @{
        #define IOADDRH_ETH_TX_ETYPE(base) \
            __IO_CALC_ADDRESS_NATIVE(base, ETH_TX_ETYPE_REG)
        #define IORD_ETH_TX_ETYPE(base) \
            IORD(base, ETH_TX_ETYPE_REG) 
        #define IOWR_ETH_TX_ETYPE(base, data) \
            IOWR(base, ETH_TX_ETYPE_REG, data)
        /// @}

        /// \name Битовые обращения к регистру типа протокола
        /// @{
        #define ETH_TX_ETYPE_MSK                  0x0000FFFF
        #define ETH_TX_ETYPE_OFST                 0
        /// @}        
    /// @}
/// @}

/// @}
#endif /* __ETH_TX_REGS_H__ */
